# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall -g

# 定义目录变量
SRCDIR = src
BUILDDIR = build

# 获取所有的.c文件
SRCS := $(wildcard $(SRCDIR)/*.c)

# 将.c文件转换为目标文件，并放入build目录
OBJS := $(patsubst $(SRCDIR)/%.c,$(BUILDDIR)/%.o,$(SRCS))

# 定义目标文件名和依赖关系
TARGET = ProjectOut
DEPS = $(OBJS:.o=.d)

# 链接目标文件
$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) $^ -o $(BUILDDIR)/$@

# 编译每个.c文件为目标文件
$(BUILDDIR)/%.o: $(SRCDIR)/%.c
	$(CC) $(CFLAGS) -c $< -o $@

# 自动生成依赖关系
-include $(DEPS)

# 生成依赖关系文件
$(BUILDDIR)/%.d: $(SRCDIR)/%.c
	@mkdir -p $(@D)
	$(CC) -MM -MF $@ -MP -MT "$(@:.d=.o) $@" $<

# 清理所有生成的文件
clean:
	rm -rf $(BUILDDIR) $(TARGET)

# 打印编译选项和目标文件
info:
	@echo "CC      = $(CC)"
	@echo "CFLAGS  = $(CFLAGS)"
	@echo "SRCDIR  = $(SRCDIR)"
	@echo "BUILDDIR= $(BUILDDIR)"
	@echo "SRCS    = $(SRCS)"
	@echo "OBJS    = $(OBJS)"
	@echo "DEPS    = $(DEPS)"
	@echo "TARGET  = $(TARGET)"
